Don't reload the current folder unnecessarily on ::map().
authorFederico Mena Quintero <federico@ximian.com>
Wed, 28 Sep 2005 01:07:08 +0000 (01:07 +0000)
committerFederico Mena Quintero <federico@src.gnome.org>
Wed, 28 Sep 2005 01:07:08 +0000 (01:07 +0000)
2005-09-27  Federico Mena Quintero  <federico@ximian.com>

Don't reload the current folder unnecessarily on ::map().

* gtk/gtkfilechooserprivate.h (ReloadState): New enum to represent
the reloading state.
(struct _GtkFileChooserDefault): Added a "reload_state" field.

* gtk/gtkfilechooserdefault.c (gtk_file_chooser_default_init):
Initialize impl->reload_state.
(gtk_file_chooser_default_map): Check the impl->reload_state; load
a default folder if no folder has been set, or reload the current
one only if we had been unmapped first.
(gtk_file_chooser_default_update_current_folder): Set the
reload_state to RELOAD_HAS_FOLDER.
(gtk_file_chooser_default_unmap): Implement, and set the
reload_state to RELOAD_WAS_UNMAPPED.
(shortcuts_model_create): Don't call shortcuts_add_bookmarks()
here; they'll get (re)loaded on ::map() anyway.

* gtk/gtkfilechooserwidget.c
(gtk_file_chooser_widget_constructor): Don't set a default folder here.

* tests/autotestfilechooser.c (test_action_widgets): Don't take in
a dialog; build it ourselves.
(test_reload): New test to ensure that we don't load the default
folder more than once, and that we reload it when
unmapping/remapping.
(get_impl_from_dialog): New utility function.
(test_widgets_for_current_action): Use get_impl_from_dialog().

gtk/gtkfilechooserprivate.h

index 0efc915ef1476b9d40293c8baf8e692431a8b5b4..e9d45aae84eb6123567cf47f1bcff141711b5f2d 100644 (file)
@@ -135,6 +135,12 @@ typedef enum {
   LOAD_FINISHED                        /* Model is fully loaded and inserted into the tree */
 } LoadState;
 
+typedef enum {
+  RELOAD_EMPTY,                        /* No folder has been set */
+  RELOAD_HAS_FOLDER,           /* We have a folder, although it may not be completely loaded yet; no need to reload */
+  RELOAD_WAS_UNMAPPED          /* We had a folder but got unmapped; reload is needed */
+} ReloadState;
+
 struct _GtkFileChooserDefault
 {
   GtkVBox parent_instance;
@@ -182,6 +188,7 @@ struct _GtkFileChooserDefault
   GtkTreeModelSort *sort_model;
 
   LoadState load_state;
+  ReloadState reload_state;
   guint load_timeout_id;
 
   GSList *pending_select_paths;